Electronic data storage is one of the most important aspects of the modern economy. Almost every aspect of modern life has some element that requires the storage and retrieval of electronic data.
A storage system is an integrated collection of one or more controllers, one or more data storage devices such as disks, CD-ROMs, tapes, media loaders, and the like, and any required control software that provides storage services to a host such as a server on a network, a Web server on the Internet, a mainframe computer, or the like.
While a storage system is an important means to store and retrieve critical data, the physical mechanisms employed in the storage and retrieval process may fail, preventing storage and retrieval of the data. Many programmatic and hardware facilities have been utilized to provide continued access to the data. For example, intra-array data mirroring and conventional RAID techniques, when properly configured, may prevent data loss due to the failure of any single component. However, there are still various failure scenarios which may result in loss of access to data. For example, the failure of multiple components may disrupt access to a given data set, often resulting in permanent data loss.
Currently, methods exist to mirror entire data sets between arrays. If access to a specific data set is disrupted, the mirrored copy may be accessed in its place. Using these methods, however, the host must be reconfigured, either manually or programmatically, to recognize the existence of the data set in a logically different location. Additionally, for various logistical reasons, the host must be prevented from accessing the mirrored data set until it is needed. The process, then, of “failing over” from a non-accessible volume in a primary array to a copy of that volume in a secondary array, generally requires human intervention and may result in temporary loss of access to data. Furthermore, any information cached in the host which has not been written to a disk may be lost, since the host may not be able to retain that cache and apply it to a new logical target. The host simply cannot recognize that the new target is a mirror of the original data set.
Thus, it would be desirable to have an apparatus and method that provide volume failover from one array to another without requiring any special functionality on the host and without interrupting access to, or losing data from, the volume in question.